/**
 * 日期格式化
 * @param {Date|string|number} date 日期对象/日期字符串/时间戳
 * @param {string} format 格式化模式
 * @returns {string} 格式化后的日期字符串
 */
export function formatDate(date, format = 'yyyy-MM-dd') {
    if (!date || date === '/' || date === '//') return '';

    if (typeof date === 'string') {
        date = new Date(date.replace(/-/g, '/'));
    } else if (typeof date === 'number') {
        date = new Date(date);
    }

    const o = {
        'M+': date.getMonth() + 1,
        'd+': date.getDate()
    };

    if (/(y+)/.test(format)) {
        format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
    }

    for (let k in o) {
        if (new RegExp('(' + k + ')').test(format)) {
            format = format.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
        }
    }
    return format;
}

/**
 * 格式化日期时间
 * @param {string | Date} date 日期时间
 * @returns {string} 格式化后的日期时间字符串 YYYY-MM-DD HH:mm:ss
 */
export function formatDateTime(date) {
    if (!date) return ''
    const d = new Date(date)
    const year = d.getFullYear()
    const month = String(d.getMonth() + 1).padStart(2, '0')
    const day = String(d.getDate()).padStart(2, '0')
    const hour = String(d.getHours()).padStart(2, '0')
    const minute = String(d.getMinutes()).padStart(2, '0')
    const second = String(d.getSeconds()).padStart(2, '0')
    return `${year}-${month}-${day} ${hour}:${minute}:${second}`
}


/**
 * 时间格式化
 * @param {Date} date 日期对象
 * @param {String} fmt 格式化模式
 * @returns {String} 格式化后的时间字符串
 */
export function formatTime(time) {
    if (!time) return '';
    if (typeof time === 'string') {
        // 如果只有时间部分，添加日期部分再解析
        if (time.indexOf(':') > -1 && time.indexOf('T') === -1) {
            time = `2000/01/01 ${time}`;
        }
        time = new Date(time.replace(/-/g, '/'));
    }
    if (typeof time === 'number') {
        time = new Date(time);
    }

    const hours = time.getHours().toString().padStart(2, '0');
    const minutes = time.getMinutes().toString().padStart(2, '0');
    const seconds = time.getSeconds().toString().padStart(2, '0');
    return `${hours}:${minutes}:${seconds}`;
}

// 常用格式
export const DATE_FORMAT = {
    date: 'yyyy-MM-dd',
    time: 'HH:mm:ss',
    datetime: 'yyyy-MM-dd HH:mm:ss',
    shortTime: 'HH:mm'
};
